package h1.sismetro.negocio.almoxarifado;

import h1.sismetro.classesbasicas.Ferramenta;
import h1.sismetro.dao.RepositorioFerramentaJDBC;
import h1.sismetro.exceptions.AcessoAoBancoException;
import h1.sismetro.exceptions.ConexaoComBancoException;
import h1.sismetro.exceptions.FerramentaJaCadastradaException;
import h1.sismetro.exceptions.FerramentaNaoEncontradaException;
import h1.sismetro.exceptions.NenhumaFerramentaCadastradaException;

import java.util.List;

/**
 * 
 * @author Paulo
 * @version 1.0
 *
 */
public class CadastroFerramenta implements ICadastroFerramenta {

	private RepositorioFerramentaJDBC repositorioFerramenta;
	
	public CadastroFerramenta(){
		this.repositorioFerramenta = new RepositorioFerramentaJDBC();
	}
	
	public CadastroFerramenta(RepositorioFerramentaJDBC repositorio){
		this.repositorioFerramenta = repositorio;
	}

	//@Override
	public void alterar(Ferramenta novaFerramenta)throws ConexaoComBancoException, AcessoAoBancoException, FerramentaNaoEncontradaException {
		if(this.repositorioFerramenta.existe(novaFerramenta.getCodigo())){
			this.repositorioFerramenta.atualizar(novaFerramenta);
		}else{
			FerramentaNaoEncontradaException e =
				new FerramentaNaoEncontradaException(novaFerramenta.getCodigo());
			throw e;
		}
		
	}

	//@Override
	public void cadastrar(Ferramenta novaFerramenta)throws ConexaoComBancoException, AcessoAoBancoException, FerramentaJaCadastradaException {
		if(!this.repositorioFerramenta.existe(novaFerramenta.getCodigo())){
			this.repositorioFerramenta.inserir(novaFerramenta);
		}else{
			FerramentaJaCadastradaException e =
				new FerramentaJaCadastradaException(novaFerramenta.getCodigo());
			throw e;
		}
			
	}

	//@Override
	public void excluir(int codigo) throws ConexaoComBancoException, AcessoAoBancoException, FerramentaNaoEncontradaException {
		if(this.repositorioFerramenta.existe(codigo)){
			this.repositorioFerramenta.remover(codigo);
		}else{
			FerramentaNaoEncontradaException e =
				new FerramentaNaoEncontradaException(codigo);
			throw e;
		}
	}

	//@Override
	public boolean existe(int codigo) throws ConexaoComBancoException, AcessoAoBancoException {		
		return this.repositorioFerramenta.existe(codigo);
	}

	//@Override
	public List<Ferramenta> imprimir() throws ConexaoComBancoException, AcessoAoBancoException, NenhumaFerramentaCadastradaException {
		if(!(this.repositorioFerramenta.listar().size() <= 0)){
			return this.repositorioFerramenta.listar();
		}else{
			NenhumaFerramentaCadastradaException e = 
				new NenhumaFerramentaCadastradaException();
			throw e;
		}
	}

	
	//@Override
	public Ferramenta recuperar(int codigo) throws ConexaoComBancoException, AcessoAoBancoException, FerramentaNaoEncontradaException {
		if(this.repositorioFerramenta.existe(codigo)){
			return this.repositorioFerramenta.localizar(codigo);
		}else{
			FerramentaNaoEncontradaException e =
				new FerramentaNaoEncontradaException(codigo);
			throw e;
		}
	}
	
	//@Override
	public int obterCodigo() throws ConexaoComBancoException, AcessoAoBancoException {		
		return this.repositorioFerramenta.gerarCodigo();
	}
	
	

}
